package com.qfedu.lc.user.service.impl;

import cn.hutool.core.util.IdUtil;
import com.alibaba.druid.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;


import com.qfedu.lc.common.vo.R;
import com.qfedu.lc.common.config.RabbitKeyConfig;
import com.qfedu.lc.common.param.MqMsg;
import com.qfedu.lc.user.entity.SmsLog;
import com.qfedu.lc.user.entity.User;
import com.qfedu.lc.user.mapper.SmsLogMapper;
import com.qfedu.lc.user.mapper.UserMapper;
import com.qfedu.lc.user.service.SmsLogService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;


/**
 * <p>
 * 3.短信发送表 服务实现类
 * </p>
 *
 * @author wgz
 * @since 2024-01-24
 */
@Service
public class SmsLogServiceImpl extends ServiceImpl<SmsLogMapper, SmsLog> implements SmsLogService {


    @Autowired
    private UserMapper userMapper;

    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     *      * 1校验手机号是否为空
     *      * 2.校验手机号 是否被其他用户使用
     *      * 3.发送手机验证码
     *      * 4.返回数据 验证已发送，请查收
     * @param phone
     * @return
     */
    @Override
    public R sendRegisterCode(String phone) {

        //  1校验手机号是否为空   还可以检查手机号格式（留给大家）
        if (StringUtils.isEmpty(phone) ){ // 如果为空 直接返回

            return  R.fail("请检查手机号");
        }

        //  2.校验手机号 是否被其他用户使用 调用dao层，根据手机号查询，如果查询到结果，说明手机号已经被注册
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("phone",phone);
        List<User> users = userMapper.selectList(queryWrapper);

        if (users!=null && users.size()>0){
            return  R.fail("该手机号已经被注册");
        }

        // 3.发送手机验证码
        // IdUtil.getSnowflakeNextId() 获取雪花算法随机数
        rabbitTemplate.convertAndSend("",  //  1 注册验证码
                RabbitKeyConfig.Q_SENDSMS,new MqMsg(IdUtil.getSnowflakeNextId(),1,phone));


//        4.返回数据 验证码已发送，请查收
        return R.ok("验证码已发送，请查收");
    }
}
